home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
graphics
/
mandlbx1.arc
/
RAST.C
< prev
next >
Wrap
C/C++ Source or Header
|
1985-11-20
|
2KB
|
71 lines
/* rast.c PAK 8/86
save and restore the raster under dialog boxes */
/* I would have used vro_cpyfm, but where can I get a hold of the screen MFDB?*/
/* note: the notation "alphaPbeta" denotes a dimensional constant which is the
number of alpha's per beta */
#include <osbind.h>
struct rast /* the piece of the screen being saved now */
{ long *Buffer;
long Hsize, Vsize;
long *Saddr;
int bytesPblock;
} rast;
rast_save(x0, y0, xw, yw, p, n)
int x0, y0, xw, yw, n;
long *p;
{ long *scr, *screen;
int i,j;
# define pixPblock 16
# define bytesPlong 4
# define bytesPy 160
/* hi(low) res: 640(320) 2(4)-bit pix/line */
rast.Buffer = p;
rast.Vsize = yw;
rast.Saddr=scr=screen= y0*bytesPy + (x0/pixPblock)*rast.bytesPblock
+ Logbase();
xw = rast.bytesPblock*(xw/pixPblock +2); /* +1 for each end */
/* now # bytes wide*/
if (xw*yw > n)
panic("Buffer supplied to Rast: %ld is too small\n",(long)n,0L);
rast.Hsize = xw /= bytesPlong; /* now # longs wide */
for (j = yw; j--;)
{ for (i = xw; i--;)
*p++ = *scr++;
scr = screen += bytesPy/bytesPlong;
} }
long
rastSize(x0, y0, xw, yw)
int x0, y0, xw, yw;
{ int i;
xw = xw/pixPblock +2; /* + one for each end */
/*now # blocks wide */
i = Getrez(); /* C-compiler bug -- needs to be previous stmnt*/
if (i == 2) panic("no support for B/W monitor \n");
rast.bytesPblock = 8 >> i; /*lo=8, med=4, hi=2*/
return ((long)xw*rast.bytesPblock*yw);
}
rast_restore()
{ long *p, *scr, *screen;
int i,j, xw;
p = rast.Buffer;
scr = screen = rast.Saddr;
xw = rast.Hsize;
for (j = rast.Vsize; j--;)
{ for (i = xw; i--;)
*scr++ = *p++;
scr = screen += bytesPy/bytesPlong;
} }